Skip to content

auth: include error="invalid_token" in 401 challenges - #1507

Merged
guglielmo-san merged 2 commits into
modelcontextprotocol:mainfrom
xianshujun:fix-1497-invalid-token-challenge
Nov 6, 2026
Merged

guglielmo-san merged 2 commits into
modelcontextprotocol:mainfrom
xianshujun:fix-1497-invalid-token-challenge

Conversation

@xianshujun

Copy link
Copy Markdown
Contributor

Fixes #1497

A request that presents a token the verifier rejects, an expired token, or a token missing the required expiration now receives the RFC 6750 §3.1 error="invalid_token" parameter in the WWW-Authenticate challenge. A request with no bearer token still omits the error code, and the 403 insufficient_scope path is unchanged.

Tests: extended the verify / RequireBearerToken table tests with invalid, expired, missing-expiration, no-credential, malformed-header, and resource_metadata / scope combinations. go test ./... passes.

AI-assisted: implementation and tests were drafted with ZCode under my direction.

@guglielmo-san
guglielmo-san merged commit e66275d into modelcontextprotocol:main Nov 6, 2026
9 checks passed
@guglielmo-san

Copy link
Copy Markdown
Contributor

@xianshujun thank you for the contribution!

Tangerg added a commit to Tangerg/go-sdk that referenced this pull request Nov 6, 2026
Sync 6 upstream commits through df0f295: the new
ParseURLElicitationRequiredError (modelcontextprotocol#1495), the tools/call retry on
HeaderMismatch (modelcontextprotocol#1502), notifications without Mcp-Method (modelcontextprotocol#1504), the
cancelable ioConn write lock (modelcontextprotocol#1499), invalid_token in 401 challenges
(modelcontextprotocol#1507) and the ioConn frame cap that no longer depends on read
boundaries (modelcontextprotocol#1510).

modelcontextprotocol#1499 and modelcontextprotocol#1510 are the upstream form of the fork's transport fixes, so
ioConn now matches upstream except that canceling a write already in
progress still closes the connection, because the peer may hold part of
the frame. Upstream's tests replace the fork's duplicates of them; the
fork keeps its test for the in-progress cancellation. New pkg.go.dev
links in the docs use the fork's module path.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

auth: RequireBearerToken omits error="invalid_token" when a presented token is rejected

2 participants